﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once
#include "GbmpDefines.h"
#include <string>
#include "GmepCommonSettings.h"

namespace gcmp
{
    class IConfigRecord;
    class IDocument;
}

#define  COMPANYNAME L"Glodon"
#define  PRODUCTNAME L"GMEP"
#define  COLLABORATIONCACHEFOLDER L"GMEPCache"
#define  APPGMEPCACHEFOLDER L"AppGMEPCache"

class GMEP_COMMONSETTINGS_EXPORT GmepFilePathSettings
{
public:
    // GMEP默认Data文件夹路径，ProgramData\Glodon\AppGNMEP, 安装后所有的Data文件都应在这里
    static const std::wstring GetGMEPDataFolderPath();

    // 默认项目配置gset路径
    static const std::wstring DefaultDatasetFilePath();

    // Data文件夹下的项目配置的配置文件路径
    static const std::wstring GetProjectSettingHttpConfigFilePath();
    // Data文件夹下的项目配置的数据定义文件ddq 的路径
    static const std::wstring GetProjectSettingDDQFilePath();

    // Data文件夹下的属性分类的数据定义文件ddq路径
    static const std::wstring GetCategoryDDQFilePath();
    // Data文件夹下的属性分类的数据文件qpd路径
    static const std::wstring GetCategoryQPDFilePath();
    static const std::wstring GetPropertyQPDFilePath();
    static const std::wstring GetProductDbToGMEPQPDFilePath();

    // 默认自动缓存步数设置文件
    static const std::wstring DefaultAutoCacheConfigFilePath();
    // 用户自定义的缓存文件夹设置文件
    static const std::wstring CustomCacheFolderConfigFilePath();

    // 默认产品数据库文件的路径
    // 合并之后的文件夹 （也是db3 所在文件夹）
    static const std::wstring  DefaultProductFolderPath();
    static const std::wstring  DefaultProductDBFilePath();

    // 合并之前的文件夹 （3D 和2D 所在文件夹）
    static const std::wstring DefaultProduct3DFolderPath();
    static const std::wstring DefaultProduct2DFolderPath();

    // 默认项目配置产品库路径（特殊构件，如组合式构件）
    static const std::wstring  DefaultProjectSettingProductDBPath();
    // 规范数据库文件
    static const std::wstring  DefaultSpecificationDBFilePath();

    // 标注族目录
    static const std::wstring  DefaultAnnotationFamilyFolderPath();
    // 当前协同项目的数据库路径
    static bool IsUsingGdcProjectComponents(); // 是否启用协同项目构件库
    // 返回系统的临时文件夹，如C:\Users\XX\AppData\Local\AppGmep
    static const std::wstring GetSystemTemporaryGMEPFolderPath();
    // 返回机电的缓存文件夹，可能为C:\Users\XX\AppData\Local\AppGmep 或用户自定义设置的CustomAPPGMEPCacheFolder
    static const std::wstring GetTemporaryGMEPFolderPath();
    static const std::wstring GetTemporaryProjectFolderPath(std::wstring projectId);
    static const std::wstring GetTemporaryProjectProductFolderPath(std::wstring projectId);
    static const std::wstring GetTemporaryProjectProduct3DFolderPath(std::wstring projectId);
    static const std::wstring GetTemporaryProjectDBFilePath(std::wstring projectId);

    // 当前项目临时产品数据库二维图例文件夹的路径
    static const std::wstring GetTemporaryProjectProduct2DFolderPath(std::wstring projectId);
    static const std::wstring GetEnterpriseFolderPath();
    static const std::wstring GetEnterpriseProduct2DFolderPath();
    // 公共构件产品库的存储路径
    static const std::wstring GetPublicProductDBFilePath(const std::wstring& version);
    static const std::wstring GetTemporaryPublicFolderPath(const std::wstring& version);
    static const std::wstring GetPublicProductFolderPath(const std::wstring& version);
    static const std::wstring GetPublicProduct3DFolderPath(const std::wstring& version);
    static const std::wstring GetPublicProduct2DFolderPath(const std::wstring& version);

    // 项目配置产品库路径（特殊构件，如组合式构件）
    static const std::wstring GetTemporaryProjectSettingProductFolderPath(std::wstring projectId);
    static const std::wstring GetTemporaryProjectSettingProductDBFilePath(std::wstring projectId);
    // 获取临时路径下存放UI history 的文件夹
    static const std::wstring GetTemporaryUIHistoryFolderPath();

    // 根据当前是否已登录协同获取当前产品数据库文件路径
    static const std::wstring GetCurrentProductFolderPath();
    static const std::wstring GetCurrentProductDBFilePath();
    static const std::wstring GetCurrentProjectSettingProductDBFilePath();
    static const std::wstring GetCurrentProduct3DFolderPath();
    static const std::wstring GetCurrentProduct2DFolderPath();

    static const std::wstring GetCurrentFittingProductFolderPath();
    static const std::wstring GetCurrentFittingProductDBFilePath();

    static const std::wstring GetSystem2DFamilyFolderPath();

    // 若是单机版文档，获取项目配置的数据文件路径
    static const std::wstring GetDocumentDatasetFilePath(const gcmp::IDocument* pDocument, std::wstring& folderPath);
    // 根据是否是单机版 获取项目配置的数据文件路径 Dataset\.gset 文件路径
    static const std::wstring GetCurrentDatasetFilePath(const gcmp::IDocument* pDocument);

    // 获取当前规范数据库文件路径
    static const std::wstring GetCurrentSpecificationDBFilePath();

    // 获取计算书文件路径
    static const std::wstring GetCalcBookFolderPath(bool& bLogInCollaborationPlatform);

    // 获取标注样式文件路径
    /// \brief app级中保留的一份tag样式
    static const std::wstring  DefaultAnnotationStyleFolderPath();
    static const std::wstring  DefaultAnnotationStyleFilePath();

    static const std::wstring  GetCurrentAnnotationStyleFolderPath(gcmp::IDocument* pDocument);
    static const std::wstring  GetCurrentAnnotationStyleFilePath(gcmp::IDocument* pDocument);
    static const std::wstring  GetGmepAppAnnotationStyleFolderPath();

    // GmepData文件夹下的构件月度升级配置文件
    static const std::wstring GetComponentUpgradeConfigFilePath();
    // GmepData文件夹下的特殊项目构件月度升级配置文件
    static const std::wstring GetSpecificComponentUpgradeConfigFilePath();
    // GmepData文件夹下的构件编辑器版本与软件版本映射配置文件
    static const std::wstring GetComponentVersionMapFilePath();
    // GmepData文件夹下的导出GFC数据库文件
    static const std::wstring GetGMEPGQIMappingRuleTablePath();
    // GmepData文件夹下的导出GFC导线类型映射数据库文件
    static const std::wstring GetGMEPGQIWireTypeMapRulePath();
    // GmepData文件夹下的导出GFC图例映射数据库文件
    static const std::wstring GetGMEPGQIDrawingIdMappingTablePath();
    // GmepData文件夹下的导出GFC3属性映射数据库文件
    static const std::wstring GetGMEPGfc3PropertiesMappingTablePath();
    // GmepData文件夹下的对象样式数据初始化文件
    static const std::wstring GetGMEPModelObjectStyleFilePath();
    // GmepData文件夹下的按系统类型初始化文件
    static const std::wstring GetGMEPClassObjectStyleFilePath();

    // GmepData文件夹下的切换显示/隐藏线宽设置
    static const std::wstring GetLineStyleSwitchesConfigFilePath();

    // GmepData文件夹下的db3升级配置文件
    static const std::wstring GetProductLibraryDBDataChangeContentFilePath();

    // exe 旁边的 模板文件
    static const std::wstring GetDefaultTemplateFilePath();
    //防排烟配置文件
    static const std::wstring GetSmokeTemplateFilePath();
    //防排烟报表文件
    static const std::wstring GetSmokeTemplateReportFilePath();
    //防排烟报表默认文件
    static const std::wstring GetSmokeTemplateDefaultReportFilePath();
    //防烟计算依据
    /*static const std::wstring GetSmokeTemplateCalBaseFYFilePath(bool bIsWord = false);*/
    //防烟计算依据-上海
   /* static const std::wstring GetSmokeTemplateCalBaseFYSHFilePath(bool bIsWord = false);*/
    //排烟计算依据
    static const std::wstring GetSmokeTemplateCalBasePYFilePath(bool bIsWord = false);
    //排烟计算依据-上海
    static const std::wstring GetSmokeTemplateCalBasePYSHFilePath(bool bIsWord = false);

    //批量生成视图样板配置文件
    static const std::wstring GetViewTemplateDataFilePath();

    static const std::wstring GetPreLoadFamilyFilePath();

    //获取排烟临界排烟量配置文件
    static const std::wstring GetMaxSmokeExhaustVolumeFilePath();

    //获取挡烟垂壁族文件
    static const std::wstring GetSmokeScreenfamilyFilePath();
    //获取系统计算表头文件
    static const std::wstring GetSmokeExhaustSysCalHeadersFilePath();
    
    //获取雨水计算城市数据配置文件
    static const std::wstring GetRainfallCalculateConfigFilePath();

    static const std::wstring GetMADAPIJsonPath();

    //获取绝热层配置文件
    static const std::wstring GetInsulationSettingsFilePath();

    //获取管综构建识别配置文件
    static const std::wstring GetMEIMepCurveIdentifyInfosFilePath();
    static const std::wstring GetMEIInfosFilePath();

    //获取雨水斗流量参照文件
    static const std::wstring GetRainBucketFallReferenceFilePath();

    // 获取当前生效的协同缓存文件夹路径 可能为系统临时文件夹：C:\Users\XX\AppData\Local\Glodon\GMEP 
    // 或用户自定义的CustomCollaborationCacheFolder
    static const std::wstring GetCurrentCollaborationCacheFolder();

    // 用户自定义的协同缓存文件夹，可能为空 如 D:\Glodon\GMEP\GMEPCache
    static std::wstring CustomCollaborationCacheFolder; 
    // 用户自定义的机电自己的临时缓存文件夹，可能为空 如 D:\Glodon\GMEP\AppGmepCache
    static std::wstring CustomAPPGMEPCacheFolder; 

    // 若用户本次修改过路径，则临时记录，关闭APP时保存至配置文件
    static std::wstring CustomCollaborationCacheFolder_ToBeSaved;
    static std::wstring CustomAPPGMEPCacheFolder_ToBeSaved;

 /// \briief 获得Gmep文件自定义配置文件路径
    /// \param pDocument 文档指针
    /// \return 返回Gmep文件自定义配置文件路径
    static std::wstring GetGmepProjectCustomDataConfigFilePath(const gcmp::IDocument* pDocument);

    /// \briief 获得Gmep文件Tag配置文件路径
    /// \param pDocument 文档指针
    /// \return 返回Gmep文件Tag配置文件路径
    static std::wstring GetGmepProjectAnnotationStyleConfigFilePath(const gcmp::IDocument* pDocument);


    /// \briief 获得Gmep文件Tag配置AnnotationStyle.xml路径
    /// \param pDocument 文档指针
    /// \return 返回Gmep文件Tag配置AnnotationStyle.xml路径
    static std::wstring GetGmepProjectAnnotationStyleXMLConfigPath(const gcmp::IDocument* pDocument);

    /// \brief 获得Gmep文件Tag配置ProjectDetailList.db3路径
    /// \param pDocument 文档指针
    /// \return  返回Gmep文件Tag配置ProjectDetailList.db3路径
    static std::wstring GetGmepProjectDetailListDB3ConfigPath(const gcmp::IDocument* pDocument);

    /// \brief 获得Gmep文件中CustomData路径
    /// \param pDocument 文档指针
    /// \return  返回Gmep文件中CustomData路径
    static std::wstring GetGmepProjectCustomDataPath(const gcmp::IDocument* pDocument);

    // GmepData文件夹下的标注样式月度升级配置文件
    static const std::wstring GetAnnotationStyleUpgradeConfigFilePath();

    static const std::wstring GetUpdateAnnotationStyleFilePath();

    /// \brief 获得Dwg导出配置文件的CustomData路径
    /// \param pDocument 文档指针
    /// \return  返回Dwg导出配置文件的CustomData路径
    static const std::wstring GetDwgExportConfigCustomDataPath(const gcmp::IDocument * pDocument);

    //获取程序目录Dwg导出配置文件目录
    static const std::wstring GetDwgExportConfigFilePath();
};
